package com.sunny.ynhz.servicebestpractice;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
import java.io.File;

/**
 * 为了保证DownloadTask可以一直在后台运行，我们还需要创建一个下载的服务。
 */
public class DownloadService extends Service {

    private DownloadTask downloadTask;

    private String downloadUrl;

    private DownloadListener listener=new DownloadListener() {

        /**
         * 构建了一个用于显示下载进度的通知
         * @param progress
         */
        @Override
        public void onProgress(int progress) {
            //NotificationManager的notify()可以让通知显示出来。
            //notify(),接收两个参数，第一个参数是id:每个通知所指定的id都是不同的。第二个参数是Notification对象。
//            getNotificationManager().notify(1,getNotification("Downloading...",progress));
        }

        /**
         * 创建了一个新的通知用于告诉用户下载成功啦
         */
        @Override
        public void onSuccess() {
            downloadTask=null;
            //下载成功时将前台服务通知关闭，并创建一个下载成功的通知

        }

        /**
         *用户下载失败
         */
        @Override
        public void onFailed() {
            downloadTask=null;
            //下载失败时，将前台服务通知关闭，并创建一个下载失败的通知
        }

        /**
         * 用户暂停
         */
        @Override
        public void onPaused() {
            downloadTask=null;
            Toast.makeText(DownloadService.this,"Download Paused",Toast.LENGTH_SHORT).show();
        }

        /**
         * 用户取消
         */
        @Override
        public void onCanceled() {
            downloadTask=null;
            //取消下载，将前台服务通知关闭，并创建一个下载失败的通知
            stopForeground(true);
            Toast.makeText(DownloadService.this,"Download Canceled",Toast.LENGTH_SHORT).show();
        }
    };

//    private DownloadBinder mBinder=new DownloadBinder();
//
//    @Override
//    public IBinder onBind(Intent intent) {
//        return mBinder;
//    }

    /**
     * 为了要让DownloadService可以和活动进行通信，我们创建了一个DownloadBinder对象
     */
//    class DownloadBinder extends Binder{

        /**
         * 开始下载
         * @param url
         */
        public void  startDownload(String url){
           if(downloadTask==null){
               downloadUrl=url;
               downloadTask=new DownloadTask(listener);
               //启动下载任务
               downloadTask.execute(downloadUrl);
           }
        }

        /**
         * 暂停下载
         */
        public void pauseDownload(){
            if(downloadTask!=null){
                downloadTask.pauseDownload();
            }
        }
//
//        /**
//         * 取消下载
//         */
//        public void cancelDownload(){
//            if(downloadTask!=null){
//                downloadTask.cancelDownload();
//            }else {
//                if(downloadUrl!=null){
//                    //取消下载时需要将文件删除，并将通知关闭
//                    String fileName=downloadUrl.substring(downloadUrl.lastIndexOf("/"));
//                    String directory= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath();
//                    File file=new File(directory+fileName);
//                    if(file.exists()){
//                        file.delete();
//                    }
//                    getNotificationManager().cancel(1);
//                    stopForeground(true);
//                    Toast.makeText(DownloadService.this, "Canceled", Toast.LENGTH_SHORT).show();
//                }
//            }
//
//        }



//    }

    /**
     * 获取NotificationManager的实例，对通知进行管理
     * @return
     */
    private NotificationManager getNotificationManager(){
        return (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
